package com.eimf.saf.base.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @author eden Action基类，所有后续开发的Action都必须继承这个基类
 */
@Controller
@Scope("prototype")
public class BaseAction extends ActionSupport implements SessionAware
{
    private static final long serialVersionUID = 1L;
    public static final String INNERJSP = "innerjsp";
    public static final String OUTERJSP = "outerjsp";
    public static final String ACTION = "action";
    public static final String JSON = "json";
    public String dynaPath;
    public String jsonResult;

    private Map<String, Object> sessionMap;

    /*
     * 跳转到WEB-INF/content/下的某个文件夹下的jsp页面 folder ： 文件夹名 jspPage ： 目标jsp页面名，不带扩展名
     */
    protected String toContentView(final String folder, final String jspPage)
    {
        if (folder == null || "".equals(folder))
        {
            dynaPath = jspPage;
        } else
        {
            dynaPath = new StringBuilder(folder).append("/").append(jspPage).toString();
        }
        return BaseAction.INNERJSP;
    }

    /*
     * 跳转到应用根下面的 jsp页面 jspPage ： 目标jsp页面名，不带扩展名
     */
    protected String toWebRootView(final String jspPage)
    {
        dynaPath = jspPage;
        return BaseAction.OUTERJSP;
    }

    /*
     * 跳转到一个 Action动作中 nameSpace ： 目标Action的命名空间 action :
     * 目标Action的名称，只写第除Action之前的字母，首字母小写 method ： 目标Action的动作名（内部方法名）
     */
    protected String toAction(String nameSpace, final String action, final String method)
    {
        nameSpace = nameSpace == null ? "" : nameSpace;
        dynaPath = new StringBuilder(nameSpace).append("/").append(action).append(".").append(method).toString();
        return BaseAction.ACTION;
    }

    /*
     * 跳转到命名空间为core的一个 Action动作中 action : 目标Action的名称，只写第除Action之前的字母，首字母小写
     * method ： 目标Action的动作名（内部方法名）
     */
    protected String toAction(final String action, final String method)
    {
        dynaPath = new StringBuilder("core").append("/").append(action).append(".").append(method).toString();
        return BaseAction.ACTION;
    }

    /*
     * 转向日历显示页面
     */
    public String toCalendar()
    {
        return toContentView("public", "calendar");
    }

    /**
     * 拦截器调用的方法
     */
    @Override
    public void setSession(final Map<String, Object> arg0)
    {
        this.sessionMap = arg0;
    }

    public Object getFromSession(final String key)
    {
        return sessionMap.get(key);
    }

    public void setToSession(final String key, final Object obj)
    {
        sessionMap.put(key, obj);
    }

}
